kubevirt实验部署:k8s1.23.17+kube 您所在的位置:网站首页 kubectl 镜像版本一样 未改变 kubevirt实验部署:k8s1.23.17+kube

kubevirt实验部署:k8s1.23.17+kube

2023-05-08 19:58| 来源: 网络整理| 查看: 265

kubevirt实验部署:k8s1.23.17+kube-ovn+nfs+kubevirt+ceph 集成使用 精选 原创

flyfish225 2023-05-03 15:21:09 博主文章分类:操作系统 ©著作权

文章标签 kubevirt k8s kube-ovn ceph 文章分类 kubernetes 云计算 yyds干货盘点

©著作权归作者所有:来自51CTO博客作者flyfish225的原创作品,谢绝转载,否则将追究法律责任

标签(空格分隔): kubernetes系列

一:kubevirt 的简介 KubeVirt是一个Kubernetes插件,它为Kubernetes提供了在与容器相同的基础结构上提供、管理和 控制虚拟机的能力。KubeVirt是由云原生计算基金会(CNCF)赞助的开源项目,目前正处于孵化阶段。 KubeVirt使Kubernetes能够使用与容器化工作负载相同的工具来调度、部署和管理虚拟机, 从而消除了使用不同监视和管理工具的单独环境的必要性。为虚拟机和Kubernetes一起工作提供了可能。 使用KubeVirt,您可以声明: 创建虚拟机 在Kubernetes群集上调度虚拟机 启动虚拟机 停止虚拟机 删除虚拟机 虚拟机运行在Kubernetes pod中,并利用标准的Kubernetes网络和存储。

image.png

如果你嫌上面的架构图太繁琐,这里还有一个简化版:

image.png

image.png

重要组件: 1. virt-api (1) HTTP API Server作为所有涉及虚拟化相关的处理流程的入口(Entry Point),负责更新、 验证VMI CRDs; (2) 提供RESTful API来管理集群中虚拟机,Kubevirt采用CRD的工作方式,virt-api 提供自定义的API请求处理流程,如VNC、 Console、 Start/Stop虚拟机; 2. virt-controller (1) 该控制器负责监控虚拟机实例VMI对象和管理集群中每个虚拟机实例VMI的状态以及与其相关的Pod; (2) VMI对象将在其生命周期内始终与容器关联,但是,由于VMI的迁移,容器实例可能会随时间变化。 3. virt-handler (1) 在K8S的计算节点上,virt-handler运行于Pod中,作为DaemonSet; (2) 类似于virt-controller都是响应式的,virt-handler负责监控每个虚拟机实例的状态变化, 一旦检测到状态变化就响应并确保相应操作能达到所需(理想)状态; (3) virt-handler负责以下几方面:保持集群级VMI Spec与相应libvirt域之间的同步; 报告Libvirt域状态和集群Spec的变化;调用以节点为中心的插件以满足VMI Spec定义的网络和存储要求。 4.virt-launcher (1) 每个虚拟机实例(VMI)对象都会对应一个Pod,该Pod中的基础容器中运行着Kubevirt 核心组件virt-launcher; (2) K8S或者Kubelet是不负责运行VMI的运行的,取而代之的是,群集中每个节点上的守护进程会 负责为每个Pod启动一个与VMI对象关联的VMI进程,无论何时在主机上对其进行调度。 (3) virt-launcher Pod的主要功能是提供cgroups和名称空间并用于托管VMI进程。 (4) virt-handler通过将VMI的CRD对象传递给virt-launcher来通知virt-launcher启动VMI。 然后virt-launcher在其容器中使用本地libvirtd实例来启动VMI。从此开始, virt-launcher将监控VMI进程,并在VMI实例退出后终止; (5) 如果K8S的Runtime在VMI退出之前试图关闭virt-launcher Pod时, virt-launcher会将信号从K8S转发给VMI进程,并尝试推迟pod的终止,直到VMI成功关闭。 5.Libvirtd (1) 每个VMI实例对应的Pod都会有一个libvirtd实例; (2) virt-launcher借助于libvirtd来管理VMI实例的生命周期; 二:kubevirt实验安装 2.1 系统介绍与初始化 系统: CentOS7.9x64 主机名: cat /etc/hosts ---- 172.16.10.11 flyfish11 172.16.10.12 flyfish12 172.16.10.13 flyfish13 172.16.10.14 flyfish14 172.16.10.15 flyfish15 172.16.10.16 flyfish16 172.16.10.17 flyfish17 ----- 本次安装前4台机器,每个机器8core/8G/硬盘/dev/sda 100G,/dev/sdb 150G,/dev/sdc 100G,/dev/sdd 100G ceph-rook 硬盘分配: /dev/sda 系统盘 /dev/sdb metadevice 盘 /dev/sdc osd 盘 /dev/sdd osd 盘 vmware在线刷新硬盘命令 echo "- - -" >> /sys/class/scsi_host/host0/scan echo "- - -" >> /sys/class/scsi_host/host1/scan echo "- - -" >> /sys/class/scsi_host/host2/scan 系统关闭selinux / firewalld 清空 iptables 防火墙规则 做好无密钥认证登录。 yum -y install wget jq psmisc vim net-tools nfs-utils telnet yum-utils device-mapper-persistent-data lvm2 git network-scripts tar curl -y # 关闭交换分区 sed -ri 's/.*swap.*/#&/' /etc/fstab swapoff -a && sysctl -w vm.swappiness=0 cat /etc/fstab # /dev/mapper/centos-swap swap swap defaults 0 0 # ## 关闭 SeLinux # setenforce 0 # sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config # 修改内核参数 yum -y install bridge-utils modprobe br_netfilter vim /etc/sysctl.conf ----- net.ipv4.ip_forward = 1 net.ipv6.conf.all.disable_ipv6 = 1 net.bridge.bridge-nf-call-arptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 ----- sysctl -p cat /etc/security/limits.conf * hard nofile 655360 * soft nofile 655360 * hard nproc 655360 * soft nproc 655360 * soft core 655360 * hard core 655360 root hard nofile 655360 root soft nofile 655360 EOF ###系统依赖包 yum install -y conntrack ntpdate ntp ipvsadm ipset jq iptables curl sysstat libseccomp wget vim net-tools git ### 开启ipvs 转发 modprobe br_netfilter cat > /etc/sysconfig/modules/ipvs.modules /tmp/tmp.json curl -k -H "Content-Type: application/json" -X PUT --data-binary @/tmp/tmp.json http://127.0 done sleep 1 ps -ef |grep "kubectl proxy" |grep -v grep |awk '{print $2}'|xargs kill 五: 创建测试虚拟机 官方测试模板: curl https://kubevirt.io/labs/manifests/vm.yaml kubectl apply -f https://kubevirt.io/labs/manifests/vm.yaml

image.png

virtctl expose virtualmachine testvm --name vmiservice --target-port 22 --port 8022 --type NodePort 对外发布端口 镜像上传 上传镜像时会调用 cdi-uploadserver 创建pod,完成后销毁 查看uploadproxy-url的svc 地址: kubectl get svc -n cdi

image.png

上传镜像:cirros-0.4.0-x86_64-disk.img virtctl image-upload \ --image-path="/root/kubevirt/cirros-0.4.0-x86_64-disk.img" \ --storage-class=rook-ceph-block \ --pvc-name=img-cirros-0.4.0 \ --pvc-size=5Gi \ --uploadproxy-url=https://10.104.23.34 \ --insecure \ --wait-secs=240

image.png image.png

基于上传的镜像创建虚拟机 # 创建DV vim dv.yaml --- apiVersion: cdi.kubevirt.io/v1beta1 kind: DataVolume metadata: name: dv-cirros namespace: default spec: source: pvc: namespace: default name: img-cirros-0.4.0 pvc: storageClassName: "rook-ceph-block" accessModes: - ReadWriteMany resources: requests: storage: 5Gi volumeMode: Block ----- kubectl apply -f dv.yaml

image.png

dv其实是跨名称空间复制pvc,可以将任意名称空间的pvc复制到指定名称空间 为实例申请一个可启动pvc,dataSource指向上面创建的dv,即pvc克隆 说明:如果是通过 virtctl image-upload 命令上传的镜像,不创建上面的dv,dataSource直接指 向 virtctl image-upload 命令上传--pvc-name也可以 kubectl get dv

image.png image.png

创建实例,将卷指向上面创建的pvc vim vm-crrios.yaml ---- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-cirros-bootdisk namespace: default spec: storageClassName: "rook-ceph-block" volumeMode: Block accessModes: - ReadWriteMany dataSource: kind: PersistentVolumeClaim name: dv-cirros resources: requests: storage: 5Gi ---- kubectl apply -f vm-crrios.yaml

image.png

vim vm-crrios1.yaml ---- apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: name: vm-cirros01 spec: running: false template: metadata: labels: kubevirt.io/size: thin kubevirt.io/domain: vm-cirros01 spec: domain: devices: disks: - name: root-disk disk: bus: virtio interfaces: - name: default masquerade: {} resources: requests: memory: 64M networks: - name: default pod: {} volumes: - name: root-disk persistentVolumeClaim: claimName: pvc-cirros-bootdisk ---- kubectl apply -f vm-crrios.yaml

image.png

kubect get pvc kubectl get vm

image.png image.png

打赏 收藏 评论 分享 举报

上一篇:使用KuboardSpray安装k8s1.26.1 并集成kuboard管理面板



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有